//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this sample source code is subject to the terms of the Microsoft
// license agreement under which you licensed this sample source code. If
// you did not accept the terms of the license agreement, you are not
// authorized to use this sample source code. For the terms of the license,
// please see the license agreement between you and Microsoft or, if applicable,
// see the LICENSE.RTF on your install media or the root of your tools installation.
// THE SAMPLE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES OR INDEMNITIES.
//

#ifndef _NotifyWindowList_H_
#define _NotifyWindowList_H_

#include <windows.h>
#include "devnotify.h"

typedef struct tag_NOTIFY_EVENT_NODE
{
    struct tag_NOTIFY_EVENT_NODE*   pNext;
    DEVNOTIFY_EVENT                 spkEv;
}NOTIFY_NODE;

// This class is not multi-thread safe. Caller should ensure no multiple calls be made at same time.
class NotifyWindowList 
{
public:
    NotifyWindowList();    
    NOTIFY_NODE* AddWindow(DEVNOTIFY_EVENT spkEv);
    BOOL RemoveWindow(HWND hWnd);
    BOOL SendMessage(DWORD val);
    BOOL SendMessage(NOTIFY_NODE* spkEv, DWORD val);
    DWORD ResetRecordList();
private:
    NOTIFY_NODE* m_pNotifyList;
};

#endif